/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package fallen.deck.front_end.jCustomTabbed;

import fallen.deck.entity.Deck;
import javax.swing.*;
import javax.swing.plaf.basic.BasicButtonUI;
import java.awt.*;
import java.awt.event.*;

/**
 *
 * @author Carlos S. Moreno <CarlosS.Moreno@gmail.com>
 */
public class CustomTab extends JPanel implements ActionListener {

    public enum Icon { 
        CAOS,
        LOCURA,
        PODER,
        MUERTE}
    
    private final JTabbedPane      contentPanel; //referencia al coponente contenedor, una vez asigado no cambia (final)
    private JLabel                      labelIcono; //icono de la tab
    private JLabel                       content; //texto de la tab
    private JButton                    closeButton; //el famoso botonCerrar ;)

    public CustomTab(final JTabbedPane panelContenedor) {

        super(new FlowLayout(FlowLayout.LEFT, 0, 0));

        //obtengo la referencia del tabbedPane contenedor 
        this.contentPanel=panelContenedor;
        setOpaque(false);
        
        //obtengo el indice del JPanel al que fue agregado "esta" tab
        int i = panelContenedor.getTabCount()-1;
        
        Deck deck = ((CustomDeckPanel)panelContenedor.getComponentAt(i)).getDeck();

        labelIcono = new JLabel();
       labelIcono.setIcon(
                new ImageIcon(getClass().getResource("/icons/16/"
               + deck.getDemon().getPathway().getName()+ "_16.png")));

        //Obtengo el titulo que le fue asignado al JPanel
        /*content = new JLabel() {
            public String getText() {
                //necesito el indice de nuevo porque este es el espacio de la nueva clase
                //para ello hago referencia a la clase contenedora de la que estoy ahora |
                int i = panelContenedor.indexOfTabComponent(CustomTab.this); //  <---------|
                if (i != -1) {
                    return panelContenedor.getTitleAt(i);
                }
                return null;
            }
        };*/
        if (deck.getName().length() > 15) content = new JLabel(deck.getName()
                .substring(0, 12)
                .concat("..."));
        else content = new JLabel(deck.getName());

        //agregamos el icono y establecemos un borde, para crear una distancia
        //por default entre este y otros coponentes cercanos a el
        add(labelIcono);
        labelIcono.setBorder(BorderFactory.createEmptyBorder(0,0,0,5));

        //agregamos el texto de la pestaña y establecemos una
        //distancia por default entre este componente y los demas
        add(content);
        content.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 5));

        //el boton close
        closeButton = new JButton();
        closeButton.setIcon(new ImageIcon(getClass().getResource("/icons/red_cross.png")));
        int size = 15;
        closeButton.setPreferredSize(new Dimension(size, size));
        closeButton.setToolTipText("Cerrar este documento");
        closeButton.setUI(new BasicButtonUI());
        //hacemos transparente su relleno
        closeButton.setContentAreaFilled(false);
        //No necesita ser enfocable
        closeButton.setFocusable(false);
        closeButton.setBorder(BorderFactory.createEtchedBorder());
        closeButton.setBorderPainted(false);
        //Efecto de enmarcado cuando el mouse pasa sobre el
        closeButton.addMouseListener(eventosRaton);
        closeButton.setRolloverEnabled(true);
        //Listener para obtener controlar los eventos del boton
        closeButton.addActionListener(this);
        add(closeButton);
        //de nuevo un borde predeterminado
        setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
        
    }

    public void actionPerformed(ActionEvent ev){
       Object o = ev.getSource();
       if (o==closeButton){
            //de nuevo el indice de ficha a la que pertenece "esta" pestaña
            int i = contentPanel.indexOfTabComponent(this);
            if (i != -1) {
                //quitando el JPanel al que pertenece esta pestaña
                contentPanel.remove(i);
            }
       }
   }


//static final, ahorrando un poquito de RAM ;)
    private final static MouseListener eventosRaton= new MouseAdapter() {
        public void mouseEntered(MouseEvent e) {
            Component component = e.getComponent();
            //es un boton?
            if (component instanceof JButton) {
                //casting
                JButton button = (JButton) component;
                //el mouse lo señala, pintemos el marco del boton
                button.setBorderPainted(true);
            }
        }

        public void mouseExited(MouseEvent e) {
            Component component = e.getComponent();
            //es un boton?
            if (component instanceof JButton) {
                //casting
                JButton button = (JButton) component;
                //el mouse ya no lo señala, quite el marco del boton
                button.setBorderPainted(false);
            }
        }
    };

    public String getTitle()
    {
        //obtengo el indice del JPanel al que fue agregado "esta" tab
        int i = contentPanel.indexOfTabComponent(this);
        
        return ((CustomDeckPanel)contentPanel.getTabComponentAt(i)).getDeck().getName();
    }
    
    /**
     * @return the deck
     */
    public Deck getDeck() {
        //obtengo el indice del JPanel al que fue agregado "esta" tab
        int i = contentPanel.indexOfTabComponent(this);
        
        return ((CustomDeckPanel)contentPanel.getTabComponentAt(i)).getDeck();
    }
    
    public void addNewRow()
    {
        //obtengo el indice del JPanel al que fue agregado "esta" tab
        int i = contentPanel.indexOfTabComponent(this);
        
        ((CustomDeckPanel)contentPanel.getTabComponentAt(i)).addNewRow();
    }

}